package config

import (
	"encoding/json"
	"flag"
	"fmt"
	"io/ioutil"
	"log"
)

var (
	env    *string
	config *Config
)

func GetEnv() string {
	if nil != env {
		return *env
	}
	// 定义一个名为env的命令行参数，缺省值为pro，用于指定环境
	envPtr := flag.String("env", "pro", "环境：dev或pro")
	flag.Parse()
	if *envPtr == "dev" {
		fmt.Println("程序当前使用的开发环境")
		// 开发环境下的逻辑和配置
	} else if *envPtr == "pro" {
		fmt.Println("程序当前使用的生产环境")
		// 生产环境下的逻辑和配置
	} else {
		fmt.Println("程序当前使用的未知环境")
	}
	env = envPtr
	return *env
}

// 定义结构体来映射配置文件
type Config struct {
	Uvr5Path   string `json:"uvr5_path"`
	OutPath    string `json:"out_path"`
	SovitsPath string `json:"sovits_path"`
}

func GetConfig() Config {
	if nil != config {
		return *config
	}
	// 读取配置文件
	data, err := ioutil.ReadFile(GetPath("config/config.json"))
	if err != nil {
		log.Fatal("读取配置文件错误:", err)
	}

	// 解析 JSON 数据并映射到结构体上
	config = &Config{}
	if err := json.Unmarshal(data, config); err != nil {
		log.Fatal("解析配置文件错误:", err)
	}
	return *config
}
